#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
检查数据库状态脚本
验证数据库连接和用户表是否正常
"""

import os
import sys
import sqlite3
import datetime

def check_database_status():
    """检查数据库状态"""
    print("\n===== 数据库状态检查 =====\n")
    
    # 数据库文件路径
    db_path = os.path.join('instance', 'vulnerability.db')
    
    print(f"数据库文件路径: {db_path}")
    
    # 检查数据库文件是否存在
    if not os.path.exists(db_path):
        print("❌ 错误: 数据库文件不存在！")
        return False
    
    print("✅ 数据库文件存在")
    
    try:
        # 连接到数据库
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        print("✅ 成功连接到数据库")
        
        # 检查users表是否存在
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='users';")
        table_exists = cursor.fetchone() is not None
        
        if table_exists:
            print("✅ users表存在")
            
            # 检查users表中的用户数量
            cursor.execute("SELECT COUNT(*) FROM users;")
            user_count = cursor.fetchone()[0]
            print(f"✅ users表中共有 {user_count} 个用户")
            
            # 显示用户信息
            print("\n用户列表:")
            cursor.execute("SELECT id, username, email, role FROM users;")
            users = cursor.fetchall()
            
            for user in users:
                print(f"  - ID: {user[0]}, 用户名: {user[1]}, 邮箱: {user[2]}, 角色: {user[3]}")
                
            # 检查数据库表结构
            print("\n数据库表结构:")
            cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
            tables = cursor.fetchall()
            
            for table in tables:
                print(f"  - 表名: {table[0]}")
                # 获取表结构
                cursor.execute(f"PRAGMA table_info({table[0]});")
                columns = cursor.fetchall()
                col_info = [f"{col[1]}({col[2]})" for col in columns]
                print(f"    列: {', '.join(col_info)}")
                
        else:
            print("❌ 错误: users表不存在！")
            
        # 关闭连接
        conn.close()
        print("\n✅ 数据库连接已关闭")
        return True
        
    except Exception as e:
        print(f"❌ 数据库操作失败: {str(e)}")
        return False

def check_env_status():
    """检查环境状态"""
    print("\n===== 环境状态检查 =====\n")
    
    # 检查Python版本
    print(f"Python版本: {sys.version}")
    
    # 检查当前目录
    print(f"当前工作目录: {os.getcwd()}")
    
    # 检查instance目录
    if os.path.exists('instance'):
        print("✅ instance目录存在")
        files = os.listdir('instance')
        print(f"instance目录中的文件: {files}")
    else:
        print("❌ instance目录不存在！")

def main():
    """主函数"""
    print(f"开始检查 - {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    
    check_env_status()
    check_database_status()
    
    print(f"\n检查完成 - {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

if __name__ == '__main__':
    main()